// 对 axios 的二次封装
// 1. 基地址
// 2. 最长等待时间
// 3. 请求拦截器
// 4. 响应拦截器
// 导出一个axios的实例  而且这个实例要有请求拦截器 响应拦截器
import axios from 'axios'
import store from '@/store'
import router from '@/router';
const service = axios.create({  
  // baseURL: 'http://ihrm-java.itheima.net', // 设置axios线上地址
  baseURL: process.env.VUE_APP_BASE_API ,//开发环境 动态基地址
  timeout: 5000 // 定义5秒超时
}) // 创建一个axios的实例
// console.log(service,"service")

// 添加请求拦截器
service.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么   
  //在请求拦截器 添加请求头 并携带token
    // console.log(store,"store对象"); 
    const token = store.state.user.token
    if(token){
      config.headers.Authorization= `Bearer ${token}`  //添加token
    }
  return config;
}, function (error) { 
  // 对请求错误做些什么
  return Promise.reject(error);
});

// 响应拦截器
service.interceptors.response.use(response => {
  if (!response.data.success) {
    // 操作失败  抛出错误 
    return Promise.reject(response.data.message)
  }
  return response.data // 在返回有效数据时，直接返回res.data
}, async function (error) {
  console.dir(error);
    if(error.response.data.code===10002){
       console.log('token失效,请重新登录')
       //清空token与用户信息 
       await store.dispatch('user/logout') 
       //退出登录并携带参数 
      //  router.push('/login')  
      router.push('/login?return_url=' + encodeURIComponent(router.currentRoute.fullPath))
    }
  return Promise.reject(error) // 返回执行错误 让当前的执行链跳出成功 直接进入 catch
})

export default service // 导出axios实例
